#ifndef _UBORENDERFEATURE_H_
#define _UBORENDERFEATURE_H_

#include <SERender/Renderer/RenderFeature/RenderFeature.h>
#include <memory>
#include <SERender/Resourses/Loader/ShaderLoader.h>

namespace SEngine
{

    struct EngineUniformBlockBinder : UniformBlockBinder 
    {
        virtual void Bind(Shader & shader) override;
    };

    class Camera;
    class UniformBuffer;
    class UBORenderFeature : public RenderFeature
    {
    public:
        UBORenderFeature(Renderer & renderer);
        virtual ~UBORenderFeature() = default;
        virtual void BeginFrame() override;
        virtual void EndFrame() override;
        void UpdateCameraUBOData(Camera & camera, int width, int height);
    private:
        static std::unique_ptr<UniformBuffer> m_engineUBO;
        static std::unique_ptr<UniformBuffer> m_lightUBO;
    };
} // namespace SEngine


#endif